#pragma once
#define PI 3.1415927
#include <stdio.h>
#include <math.h>

#define NAME_LENGTH 24 // 各种要素的名称最大长度限制
#define FLOAT_CLOSE(a, b) fabs((a) - (b)) < 1e-5
#define FLOAT_CLOSE_EMINUS_3(a, b) fabs((a) - (b)) < 1e-3
#define ASSERT_FLOAT_CLOSE(a, b) assert(FLOAT_CLOSE(a, b) ? 1 : (0, printf("FAILURE: Float %lf and %lf are not close\n", a, b)));
#define RETURN_VOID_IF_NULL(x) if (x == NULL) return NULL;
#define RETURN_VALUE_WITH_MSG_IF_NULL(x, ret) if (x == NULL){ \
    printf("File: %s:%d variable %s is null\n", __FILE__, __LINE__, #x);return ret;}

// 定义要用到的浮点类型。
// 可以修改为float或者double
// 建议所有fp_type打印的地方都使用%lf进行格式化，并且将其强转为fp64
typedef float fp_type;
typedef double fp64; // 64位浮点数

typedef enum {
    DOWN, // 下行
    UP    // 上行
} DIRECTION;